package org.runecore.rs2.plugin;

/**
 * RuneCore
 * Aug 25, 2011
 * @author Harry Andreas<Harry@RuneCore.org>
 */

public interface Plugin {

	/**
	 * Invoked upon action when the <code>Environment</code>
	 * has the conditions for the <code>Plugin</code>
	 */
	public abstract void onAction(Object... args);
	
	/**
	 * Invoked upon registration of the <code>Plugin</code>
	 * into the <code>Environment</code>
	 */
	public abstract void onRegistration(Object... args);
	
	/**
	 * Invoked upon the removal of the <code>Plugin</code>
	 */
	public abstract void onRemoval(Object... args);
	
	/**
	 * Used to determine when the <code>Plugin</code>
	 * should be activated
	 * @return The <code>PluginActivationEnvironment</code> state
	 */
	public abstract PluginActivationEnvironment getEnvironment(Object... args);

}